import java.util.HashMap;

class ListNode {
    public ListNode(int num) {

    }

    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap<>();

        for (int i = 0; i < nums.length; i++) {
            int other = target - nums[i];
            if(map.containsKey(other)) return new int[] {map.get(other), i};

            map.put(nums[i], i);
        }
        return new int[]{-1, -1};
    }



    public ListNode addTwoNumbers(ListNode l1, ListNode l2){
        ListNode dummy = new ListNode(0);
        ListNode cur = dummy;
        int t = 0;
        while(l1 != null || l2 != null) {
            if (l1 != null){
                t += l1.val;
            }
        }
    }

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode dummy = new ListNode(-1);//傀儡头
            ListNode cur = dummy;//
            int t = 0;//t的主要作用就是为了相加看看是否有数字超出
            //或等于10，以便于下一次的相加

            //当l1 或者 l2链表未走到空节点的时候进去
            while(l1 != null || l2 != null) {
                //抽出当前节点存的值用变量t加上
                if(l1 != null) {
                    t += l1.val;
                    l1 = l1.next;
                }
                //抽出当前节点存的值用变量t加上
                //如果为null就不用进去 也不影响最后的答案
                if(l2 != null) {
                    t += l2.val;
                    l2 = l2.next;
                }
                //因为第一个节点是傀儡节点
                //并且后面的节点并没有实例化
                //所以我们用%将10的余数留下来存放
                cur.next = new ListNode(t % 10);
                //超出或等于10的除以10的数可以留到下一个节点
                t /= 10;
                //去往新建的节点的位置 以便于进行下一个节点的新建
                cur = cur.next;
            }
            //当l1 和 l2 的链表全部都走到尽头
            //如果t还有不是0的数字存放在里面
            //我们就可以再加上一个节点 为最后一个结果
            if(t != 0){
                cur.next = new ListNode(t);
            }
            //因为dummy的头结点是-1
            //所以我们传回去dummy的next就好了
            return dummy.next;
        }
    }



}

public class TheSumOfTowNum {

}
